package cl.utfsm.isw.mecanico.actions;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.DynaActionForm;
import org.apache.struts.actions.DispatchAction;

import cl.utfsm.isw.mecanico.delegates.MenuDelegate;
import cl.utfsm.isw.mecanico.delegates.UsuarioDelegate;
import cl.utfsm.isw.mecanico.to.MenuTO;
import cl.utfsm.isw.mecanico.to.UsuarioTO;


public class LoginAction extends DispatchAction{
	
	public ActionForward despliegaLogin(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		System.out.println("[LoginAction][despliegaLogin] Ingreso al metodo.");
		try {
			 request.setAttribute("flag", 0); 
		}catch(Exception ex){
			System.out.println("[LoginAction][despliegaLogin] Ocurrio un error: " + ex);
			request.setAttribute("error", ex.getMessage());
			return mapping.findForward("error");
		}
		
		System.out.println("[LoginAction][despliegaLogin] Metodo Finalizado.");
		return mapping.findForward("login");
		
	}
	
	public ActionForward despliegaMenu(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		System.out.println("[LoginAction][despliegaMenu] Ingreso al metodo.");
		try{
			DynaActionForm loginForm = (DynaActionForm) form;
			UsuarioTO    usuario = null;
			List<MenuTO> menu    = null;
			
			try {
				System.out.println("[LoginAction][despliegaMenu] Consultando usuario: " + loginForm.getString("rut"));
				
				UsuarioDelegate usuDelegate = new UsuarioDelegate();
				String rutAux[] = (loginForm.getString("rut")).split("-");

				System.out.println("[LoginAction][despliegaMenu] Rut sin DV: " + rutAux[0]);
				
				usuario = usuDelegate.obtenerUsuario(Long.parseLong(rutAux[0]), loginForm.getString("password"));
				if (usuario == null) {
					System.out.println("[LoginAction][despliegaMenu] Usuario no existe en el sistema.");
					request.setAttribute("flag", 1);
					return mapping.findForward("login");
				}
			} catch(Exception ex){
				System.out.println("[LoginAction][despliegaMenu] Ocurrio un problema al obtener el usuario: " + ex.toString());
				request.setAttribute("error", ex);
				return mapping.findForward("error");
			}
			

			try {
				// CREAR SESSION
				System.out.println("[LoginAction][despliegaMenu] creando SESION");
				HttpSession session = request.getSession(true);
				session.setAttribute("usuario", usuario);			
				System.out.println("[LoginAction][despliegaMenu] SESION creada!!!");
				// FIN CREAR SESSION
				System.out.println("[LoginAction][despliegaMenu] Construyendo Menu para usuario: " + usuario.getTipo());
				MenuDelegate menuDelegate = new MenuDelegate(); 
				menu = menuDelegate.obtenerMenu(usuario.getTipo());
			
				if (menu == null) throw new Exception("Menu NULL");
								
				System.out.println("[LoginAction][despliegaMenu] Menu Obtenido correctamente.");
			} catch(Exception ex){
				System.out.println("[LoginAction][despliegaMenu] Ocurrio un problema al obtener el usuario: " + ex.toString());
				request.setAttribute("error", ex);
				return mapping.findForward("error");
			}
			
            request.setAttribute("usuario", usuario);
			request.setAttribute("menu", menu);
		}catch(Exception ex){
			System.out.println("[LoginAction][despliegaMenu] Ocurrio un error: " + ex);
			request.setAttribute("error", ex.getMessage());
			return mapping.findForward("error");
		}
		System.out.println("[LoginAction][despliegaMenu] Metodo Finalizado.");
		return mapping.findForward("menu");
		
	}
}

